CadQuery 选择器字符串允许过滤各种类型的对象列表。最常用的是边、面和顶点,但也可以过滤所有对象类型。

使用以下方法创建对象列表,每个方法收集一种形状:

每个方法都接受一个选择器对象或一个字符串。字符串选择器用来使用对象非常简单快捷。如果传入字符串模式,CadQuery 将自动使用关联的选择器对象。

Note

字符串选择器只是具体选择器类的快捷方式,您可以使用或扩展它们。有关每个选择器类如何工作的完整说明,请参阅CadQuery 类摘要

如果您发现内置选择器不够用,您可以轻松插入自己的选择器。请参阅扩展 CadQuery 以了解具体操作方法。

 

组合选择器

选择器可以进行逻辑组合,目前定义的运算符包括andornotexc[ept](设置差值)。例如:

result = cq.Workplane("XY").box(2, 2, 2).edges("|Z and >Y").chamfer(0.2)

还可以使用更复杂的表达式:

result = (
    cq.Workplane("XY")
    .box(2, 2, 2)
    .faces(">Z")
    .shell(-0.2)
    .faces(">Z")
    .edges("not(<X or >X or <Y or >Y)")
    .chamfer(0.1)
)

过滤面 Faces

所有类型的字符串选择器都适用于面。在大多数情况下,选择器指的是面的 法向量 方向。

如果一个面不是平面,选择器在面的质心处进行评估。这可能会导致意想不到的结果。

下面列表中使用的轴用于说明:任何轴在每种情况下都可以类似地工作。

选择器选择选择器类
+Z法线朝向+z方向的面(即Z方向最顶端的面)
cadquery.DirectionSelector
|Z法线平行于 z 方向的面
(即法线和Z方向平行,图中上下两个面)
cadquery.ParallelDirSelector
-Xx 负方向法线面cadquery.DirectionSelector
#Z法线正交(垂直)于 z 方向的面
(即法线与Z方向垂直,如图中前后左右4个面)
cadquery.PerpendicularDirSelector
%Plane平面类型的面,如图中前后左右上下6个面
cadquery.TypeSelector
>Y正 y 方向最远的面cadquery.DirectionMinMaxSelector
<Y负 y 方向最远的面cadquery.DirectionMinMaxSelector
>Y[0]
>Y[-1]
按法线方向从负到正,正数编号从0开始,负数编号从 -1 开始
>Y[0] 等于 >Y[-4]
cadquery.DirectionNthSelector
<Y[0]
<Y[-1]
法线方向从正到负,正数编号从0开始,负数编号从 -1 开始
<Y[0] 等于 <Y[-4]
cadquery.DirectionNthSelector
>>Y[-1]y 方向第一远的面
与 > 相比,>> 强调面的朝向,> 强调法线的朝向
cadquery.CenterNthSelector
<<Y[0]y 方向第一近的面
与 < 相比,<< 强调面的朝向,< 强调法线的朝向
cadquery.CenterNthSelector

过滤边 Edges

选择器通常指的是边缘的方向。

Note

除了类型 (%) 和中心 (>>) 之外,任何字符串选择器都不会选择非线性边缘。应用这些过滤器时,永远不会返回非线性边缘。

下面列表中使用的轴用于说明:任何轴在每种情况下都可以类似地工作。

选择器选择选择器类
+Z边的方向与 Z 正方向一致
左图:+Z选中红色边线
右图:沿Y轴旋转180度后,因为改变了边的方向,因此+Z无法选中红色的边线
cadquery.DirectionSelector
|Z边平行于 z 方向,不管边的方向如何,只要和Z平行即可
对于上边两张图都可以使用 |Z 选中红色部分的边线
cadquery.ParallelDirSelector
-X边的方向与 x 负方向一致cadquery.DirectionSelector
#Z垂直于 z 方向的边cadquery.PerpendicularDirSelector
%Line类型为线的边cadquery.TypeSelector
>Y正 y 方向最远的边cadquery.DirectionMinMaxSelector
<Y负 y 方向最远的边cadquery.DirectionMinMaxSelector
>Y[0]正 y 方向,第一近的平行边cadquery.DirectionNthSelector
>Y[-1]正 y 方向,第一远的平行边cadquery.DirectionNthSelector
>>Y[0]正 y 方向第一近的边缘
与 > 相比,>> 强调线与正Y方向的位置,> 强调必须是平行边
cadquery.CenterNthSelector
<<Y[-1]负 y 方向第一远的边缘cadquery.CenterNthSelector

过滤顶点 Vertices

只有少数过滤器类型适用于顶点。顶点的位置是过滤器的主题。

选择器选择选择器类
>Y正 y 方向最远的顶点cadquery.DirectionMinMaxSelector
<Y负 y 方向最远的顶点cadquery.DirectionMinMaxSelector
>>Y[-2]y 方向第二远的顶点
>> 与 > 对于顶点来说暂未发现区别
cadquery.CenterNthSelector
<<Y[0]y 方向中第一近的顶点cadquery.CenterNthSelector

用户定义的方向

可以使用用户定义的向量作为选择器的基础。例如:

result = cq.Workplane("XY").box(10, 10, 10)

# chamfer only one edge
result = result.edges(">(-1, 1, 0)").chamfer(1)

拓扑选择器

也可以利用拓扑关系来选择对象。目前支持以下方法:

祖先允许选择包含当前所选对象的所有对象。

result = cq.Workplane("XY").box(10, 10, 10).faces(">Z").edges("<Y")

result = result.ancestors("Face")

同类对象允许选择所有通过指定类型元素连接的同类对象。

result = cq.Workplane("XY").box(10, 10, 10).faces(">Z")

result = result.siblings("Edge")

将选择器与形状和草图对象一起使用

可以将选择器与cadquery.Shapecadquery.Sketch 对象一起使用。这包括链接和组合。

box = cq.Solid.makeBox(1,2,3)

# select top and bottom wires
result = cq.Workplane(obj=box).faces(">Z or <Z").wires()
作者:码峰  创建时间:2023-12-20 17:55
最后编辑:码峰  更新时间:2024-01-12 17:58